﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using br.com.portocs.unidaacademico.dominio;
using br.com.portocs.unidaacademico.ui.views;


public partial class academico_CursosCadastro : PageView
{

    private Curso obj;

    private const string AreaId = "cadCurso";
    private const string pagAnterior = "Cursos.aspx";
    private string pagInserirGrade = "GradesCadastro.aspx?acao=criarPorCurso&cursoId=[id]";

    private const string subTituloPaginaAlterar = "Alteração de Cadastro";
    private const string subTituloPaginaCriar = "Cadastrando novo item...";

    private bool voltarAcaoCriar = false; // após ação do usuario, voltar para pag anterior se acao = criar
    private bool voltarAcaoAlterar = false; // após ação do usuario, voltar para pag anterior se acao = Alterar

    //função executada no page load
    private void OutrasFuncoesCarregamento()
    {

        if (recuperarAcaoNaViewState() == "alterar")
        {

        }

        //popular os ddls
        if (!Page.IsPostBack)
        {
            preencheControleLista(cmbTipoCurso, string.Empty, string.Empty,
                                  new ArrayList(Enum.GetNames(typeof (TipoCurso)))
                                  ,"- selecione -");
        }

    }

   


    //definir propriedades no formulario ( carregamento da pag ) obj => form
    private void CarregarFormulario()
    {
        tbCodigo.Text = getObjSessao().Codigo;
        tbNome.Text = getObjSessao().Nome;
        tbDescricao.Text = getObjSessao().Descricao;
        tbAutorizacao.Text = getObjSessao().Autorizacao;
        chkAtivo.Checked = getObjSessao().Ativo;
        cmbTipoCurso.SelectedValue = getObjSessao().TipoCurso.ToString();
    }

    //form => obj
    private void setarObjComInformacoesDoFormulario()
    {
        if (recuperarAcaoNaViewState() == "criar")
        {
            //alterar somente o nome da Classe----------------
            this.obj = new Curso();
            setarObjSessao(obj);
            //---------------------------

            getObjSessao().Grades = null;


        }
        
        getObjSessao().Codigo = tbCodigo.Text;
        getObjSessao().Nome = tbNome.Text;
        getObjSessao().Autorizacao = tbAutorizacao.Text;
        getObjSessao().Ativo = chkAtivo.Checked;
        getObjSessao().Descricao = tbDescricao.Text;
        getObjSessao().TipoCurso =
            (TipoCurso) Enum.Parse(typeof (TipoCurso), cmbTipoCurso.SelectedValue, false);

        
    }

    //validações. se for para prosseguir com a ação do usuário, retornar true
    private bool formularioValidado()
    {
        bool retorno = true;

        litAviso.Text = string.Empty;
        litAviso.Text = "<b></b> Por favor, atente para as informações abaixo:<br /><br />";

        //if (tbCodigo.Text.Length != 8) 
        //{
        //    retorno = false;
        //    litAviso.Text += "- Por favor, insira um <b>Código</b> com 8 caracteres.<br />";
        //}

        if (tbNome.Text.Equals(string.Empty))
        {
            retorno = false;
            litAviso.Text += "- Por favor, insira um <b>Nome</b>.<br /><br />";
        }

        if (!retorno) litAviso.Text += "*** Nada foi feito.";
        if (retorno) litAviso.Text = "";

        validacao.Visible = !retorno;

        return retorno;        
    }




    private void FuncoesPosAcaoCursoeAcaoAlterar()
    {
        exibeInformacao(string.Format(
                            "<b>Item alterado com sucesso.</b> <br /><br /> Próxima ação: <a href='{0}'>Lançar Grade</a> | <a href='{1}'>Cadastrar outro Curso</a> | <a href='{2}'>Listar Todos Cursos</a>",
                            "GradesCadastro.aspx?acao=criar", "CursosCadastro.aspx?acao=criar", "Cursos.aspx"));
    }

    private void FuncoesPosAcaoCursoeAcaoCriar()
    {
        exibeInformacao(
            string.Format(
                "<b>Item cadastrado com sucesso.</b> <br /><br /> Próxima ação: <a href='{0}'>Lançar Grade</a> | <a href='{1}'>Cadastrar outro Curso</a> | <a href='{2}'>Listar Todos Cursos</a>",
                "GradesCadastro.aspx?acao=criar", "CursosCadastro.aspx?acao=criar", "Cursos.aspx"));
    }

    private void exibeInformacao(string mensagem)
    {
        litInfo.Text = mensagem;
        info.Visible = true;
    }

    #region Não editável

    private long ItemId = 0;


    //retorna objeto
    protected Curso getObjSessao()
    {
        if (obj == null)
        {
            if (ViewState["ItemObj"] != null)
                obj = (Curso)ViewState["ItemObj"];
            else
                CarregarObjeto();
        }
        return this.obj;
    }

    protected void setarObjSessao(Curso objS)
    {
        //ViewState["ItemObj"] = objS;
        obj = objS;
    }

    //setar acao na ViewState
    protected void setarAcaoNaViewState(string acao)
    {
        ViewState["acao"] = acao;

    }
    //recuperar acao na ViewState
    protected string recuperarAcaoNaViewState()
    {
        return ViewState["acao"].ToString();
    }

    //carrega Objeto
    protected void CarregarObjeto()
    {
        if (ItemId > 0)
            this.obj = new br.com.portocs.unidaacademico.repositorio.RepositorioCursos().RecuperarPorId(ItemId);
        else
            this.obj = new Curso();

        setarObjSessao(this.obj);
    }

    //seta a propriedade do Id
    protected void setaIdQueryString()
    {
        if (Request.QueryString["ItemId"].ToString() != null)
            this.ItemId = long.Parse(Request.QueryString["ItemId"].ToString());
        else
            this.ItemId = 0;
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        carregaArea(AreaId);

        //vendo o tipo inicial de comportamento em relação a estar criando ou alterando um obj
        if (!Page.IsPostBack)
        {
            if (Request.QueryString["acao"].ToString() != null)
                setarAcaoNaViewState(Request.QueryString["acao"].ToString());
        }

        OutrasFuncoesCarregamento();

        if (recuperarAcaoNaViewState() == "alterar")
        {

            setaIdQueryString();
            habilitaLinkInserirGrade();

            if (!Page.IsPostBack)
            {

                CarregarObjeto();
                CarregarFormulario();
            }

            litSubtituloAcao.Text = subTituloPaginaAlterar;
        }
        else
        {
            litSubtituloAcao.Text = subTituloPaginaCriar;
        }

        

    }

    private void habilitaLinkInserirGrade()
    {
        lnkInserirGrade.Visible = true;
    }

    //função executava ao clicar em "salvar alterações"
    protected void btCriarSalvar_Click(object sender, EventArgs e)
    {
        if (formularioValidado())
        {
            setarObjComInformacoesDoFormulario();
            Curso dest = new br.com.portocs.unidaacademico.repositorio.RepositorioCursos().SalvarOuAtualizar(getObjSessao());
            setarObjSessao(dest);
            string acao = recuperarAcaoNaViewState();

            if (acao == "criar")
            {
                FuncoesPosAcaoCursoeAcaoCriar();
                limparObjs();
            }

            else if (acao == "alterar")
            {
                FuncoesPosAcaoCursoeAcaoAlterar();

                if (voltarAcaoAlterar)
                    Response.Redirect(pagAnterior);
            }
        }
    }

    private void limparObjs()
    {
        this.obj = null;
        setarObjSessao(null);

    }

    protected void lnkInserirGrade_Click(object sender, EventArgs e)
    {
        Response.Redirect(pagInserirGrade.Replace("[id]", getObjSessao().Id.ToString()));
    }

    #endregion



    protected void lnkCriarNovaOferta_Click(object sender, EventArgs e)
    {
        Response.Redirect("OfertarCursos.aspx?acao=criar");
    }
}
